package rbm.modelado.problemas;

import modelado.datos.Datos;
import modelado.datos.DatosDiscretos;
import modelado.problemas.ProblemaAbstracto;
import modelado.soluciones.Solucion;
import rbm.modelado.datos.elementos.interfaces.Block;
import rbm.modelado.soluciones.SolucionRBM;
import modelado.tipos.TipoDeObjetivo;
import modelado.tipos.TipoDeOptimizacion;
import modelado.tipos.TipoDeSolucion;

public class ProblemaRBMImpl extends ProblemaAbstracto implements
		ProblemaPuzzle {
	
	private Block primaryBlock;
	private int[] startCoord;
	private int[] finishCoords;

	/**
	 * Constructor
	 * 
	 * @param d
	 *            : datos del tablero
	 * @param c
	 *            : capacidad de la mochila
	 */
	public ProblemaRBMImpl(Datos d) {
		super(d);
		setTipoDeObjetivo(TipoDeObjetivo.MEJOR_SOLUCION);
		setTipoDeOptimizacion(TipoDeOptimizacion.MAXIMIZAR);
		setTipoDeSolucion(TipoDeSolucion.MULTICONJUNTO);
		
	}

	/**
	 * Constructor
	 * 
	 * @param c
	 *            : capacidad de la mochila
	 */
	/*public ProblemaRBMImpl(Integer c) {
		capacidad = c;
	}*/

	/**
	 * Se comprueba si es solucion comprobando que empieza en posicion de inicio, finaliza en posicion fin
	 * y las posiciones intermedias son posiciones permitidas
	 */
	public boolean esSolucion(Solucion s) {
		/*boolean b1 = false;
		if (super.esSolucion(s)) {
			SolucionMochila sm = (SolucionMochila) s;
			b1 = sm.getPeso() <= getCapacidad();
		}
		return b1;*/
		return false;
	}

	public int hashCode() {
		/*
		return super.hashCode() + getCapacidad().hashCode() * 31;
		*/
		return 0;
	}
	
	/**
	 * Dos laberintos son iguales si tienen la misma dimension, los mismos niveles, la misma cantidad de obstaculos
	 * en la misma posicion, la misma cantidad de bloques, d
	 */
	public boolean equals(Object p) {
		/*boolean a = false;
		if (p instanceof ProblemaPuzzle) {
			ProblemaPuzzle p1 = (ProblemaPuzzle) p;
			a = getCapacidad().equals(p1.getCapacidad());
		}
		return a;*/
		return false;
	}

	public String toString() {
		String s = "Laberinto esquiso";
		return s;
	}

}
